


# 导入zipfile和os模块，random模块为了生成随机数
# 来合成解压后文件的名字
import zipfile
import os
import random

# 定义un_zip函数，传入参数file_name，就是zip包所在的路径
def un_zip(file_name):
    """unzip zip file"""
    # 生成0到1000的随机数，包含0和1000
    num_random=str(random.randint(0,1000))
    # 解压文件,创建一个zip_file对象
    zip_file = zipfile.ZipFile(file_name)

    # try保证如果文件名包含[0,1000]的标号，就报错，提示查看。
    # 比较好的方式验证，是将写入num_random=str(random.randint(0,1))，两次调用之后，就会显示文件名重复。

    try:
        # if 判断如果文件名存在，就继续调用函数，重新生成num_random合成文件名
        #os.path.isdir判断是否存在
        if os.path.isdir(file_name + "_files_"+num_random):
            un_zip(file_name)
        # 如果不存在file_name_files_random的文件就创建该文件
        else:
        	# os.mkdir创建文件，其实可以省略这一步骤，下一步提取时再创建
            os.mkdir(file_name + "_files_"+num_random)
        # namelist()获取zip文档内所有文件的名称列表。
        for names in zip_file.namelist():
        	# 将zip文档内的指定文件解压到当前目录
            zip_file.extract(names,"_files_"+num_random)

    except Exception as result:
        print("文件名重复，报错:\n%s\n请查看文件是否已解压"%result)


# 调用函数，传入参数
if __name__ == '__main__':
    un_zip("/root/dataset/car_plate/my_extract/simple-car-plate-recognition-2-master.zip")



